home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
8bitfiles.net/archives
/
archives.tar
/
archives
/
compuserve-file-archive
/
05 Programming
/
CWIND.ARC
/
LIB.C
< prev
next >
Wrap
Text File
|
2019-04-13
|
10KB
|
422 lines
/*
├REATE AND MAINTAIN LIBRARY FILES.
╠IBRARY FILE NAMES MUST END
WITH ".L"
*/
#INCLUDE <STDIO.H>
#INCLUDE <STRINGS.H>
#DEFINE ═┴╪╠╔┬ 200
#DEFINE ═┴╪╔─ 20
#DEFINE ═┴╪╠╔╬┼ 81
#DEFINE ╔╬╓┴╠╔─ 255
#DEFINE ├╧═╠╔═╔╘ 7
#DEFINE ├╟╥┼╘╒╥╬ 13
#DEFINE ─┼╠┼╘┼ 20
EXTERN CHAR ┬EEP╧N;
CHAR IDS[═┴╪╠╔┬][═┴╪╔─], FILES[═┴╪╠╔┬][═┴╪╔─], INBUF[═┴╪╠╔╬┼];
CHAR GETCMD (), GETKEY (), TOUPPER (), CRSGET (), ╧PEN╫INDOW (), SIZE;
UNSIGNED GETVALUE ();
MAIN()
█
CHAR ╔NFO╔─, ╠IB╔─, ╔N╔─;
UNSIGNED N;
STATIC CHAR *COMMANDS[├╧═╠╔═╔╘] = █
"╠╧┴─", "╙┴╓┼",
"├╠┼┴╥", "─╔╙╨╠┴┘",
"┴──", "╥┼═╧╓┼",
"╤╒╔╘"
▌;
HIGHMEM (0XC400); /* SET MEMORY BOUNDARIES */
╔NIT╙CRN (); /* INITIALIZE ├-╫INDOWS SYSTEM */
╔NIT╫INDOWS (); /* INITIALIZE WINDOW ALLOCATION TABLE */
╔NIT╙ET (2); /* GO INTO 80 COLUMN MODE */
IF ( !(╔NFO╔─ = ╧PEN╫INDOW (3, 14, 64, 9, "\22 ─EMO ╔NFO "))) █
╥ESET╙CREEN ();
EXIT();
▌
PRINTF ("\N╠IB ─EMO VERSION - 14/1/88");
PRINTF ("\N╠IB MODIFIED TO OPERATE UNDER ├-╫╔╬─╧╫╙ ╓1.11 BY ╥UBENS ┴BBOUD");
PRINTF ("\N\N╠╔┬ ╒TILITY ORIGINALLY BY ╨RO-╠INE ╙OFTWARE");
PRINTF ("\N├-╫╔╬─╧╫╙ ╓1.11 (C)1987 BY ╥UBENS ┴BBOUD.\N");
WAIT ();
IF ( !(╠IB╔─ = ╧PEN╫INDOW (10, 3, 40, 11, " ═AIN ═ENU "))) █
╥ESET╙CREEN ();
EXIT();
▌
SIZE = 0;
CLRSCRN();
PRINTF ("\N\N╠╧┴─ - ╠OAD LIBRARY\N");
PRINTF ("╙┴╓┼ - ╙AVE LIBRARY\N");
PRINTF ("├╠┼┴╥ - ├LEAR LIBRARY\N");
PRINTF ("─╔╙╨╠┴┘ - ─ISPLAY LIBRARY\N");
PRINTF ("┴── - ┴DD MODULES TO LIBRARY\N");
PRINTF ("╥┼═╧╓┼ - ╥EMOVE MODULES FROM LIBRARY\N");
PRINTF ("╤╒╔╘ - ╤UIT\N");
IF ( !(╔N╔─ = ╧PEN╫INDOW (50, 8, 25, 12, "\22 ╔NPUT ╥EQUEST "))) █
╥ESET╙CREEN ();
EXIT();
▌
FOR (;;) █
PRINTF ("\N├MD: ");
SWITCH (GETCMD (INBUF, COMMANDS, 7, 7)) █
CASE 0:
LOAD();
BREAK;
CASE 1:
SAVE();
BREAK;
CASE 2:
SIZE = 0;
BREAK;
CASE 3:
DISPLAY();
BREAK;
CASE 4:
ADD();
BREAK;
CASE 5:
REMOVE();
BREAK;
CASE 6:
╥ESET╙CREEN ();
PUTCHAR ('\N');
EXIT();
DEFAULT:
PRINTF ("\N** ╔NVALID ├HOICE\N");
▌
▌
▌
CLRSCRN()
█
PUTCHAR ('ô');
▌
╞╔╠┼ OPENLIB (MODE)
CHAR *MODE;
█
╞╔╠┼ F;
PRINTF ("\N\NLIBRARY FILE NAME: ");
GETVALUE (INBUF, 1, 16, 0);
F = FOPEN (INBUF, MODE);
IF (F == ╬╒╠╠ ▀▀ FERROR()) █
F = ╬╒╠╠;
PRINTF ("\N\NCAN'T OPEN %S\N", INBUF);
WAIT();
▌
RETURN F;
▌
LOAD()
█
CHAR ╠OAD╔─;
╞╔╠┼ F;
UNSIGNED I;
IF ( !(╠OAD╔─ = ╧PEN╫INDOW (20, 10, 40, 10, " ╠OAD ")))
RETURN;
IF ((F = OPENLIB ("R")) == ╬╒╠╠) █
├LOSE╫INDOW (╠OAD╔─);
RETURN;
▌
SIZE = GETC(F);
FOR (I = 0; I < SIZE; I++) █
GETID (IDS[I], F);
GETID (FILES[I], F);
▌
FCLOSE(F);
├LOSE╫INDOW (╠OAD╔─);
▌
GETID (S, F)
CHAR *S;
╞╔╠┼ F;
█
WHILE (*S++ = GETC(F))
;
▌
SAVE()
█
CHAR ╙AVE╔─;
╞╔╠┼ F;
UNSIGNED I;
IF ( !(╙AVE╔─ = ╧PEN╫INDOW (5, 5, 40, 10, " ╙AVE ")))
RETURN;
IF ((F = OPENLIB ("W")) == ╬╒╠╠) █
├LOSE╫INDOW (╙AVE╔─);
RETURN;
▌
PUTC (SIZE, F);
FOR (I = 0; I < SIZE; I++)
FPRINTF (F, "%S%C%S%C", IDS[I], 0, FILES[I], 0);
FCLOSE(F);
├LOSE╫INDOW (╙AVE╔─);
▌
WAIT()
█
PRINTF ("\NHIT ╥┼╘╒╥╬ TO CONTINUE");
WHILE (GETCH() != '\N')
;
▌
DISPLAY()
█
CHAR ─ISP╔─;
UNSIGNED I, LINE;
IF (!(─ISP╔─ = ╧PEN╫INDOW (30, 1, 40, 23, " ─ISPLAY ")))
RETURN;
LINE = 1;
FOR (I = 0; I < SIZE; I++) █
IF (LINE == 1) █
CLRSCRN();
PRINTF ("\N%C%-20S%-19S\N\N", 18, "╔─┼╬╘╔╞╔┼╥", "╞╔╠┼");
LINE = 3;
▌
PRINTF ("%-20S%-19S\N", IDS[I], FILES[I]);
LINE++;
IF (LINE == 21) █
WAIT();
LINE = 1;
▌
▌
WAIT();
├LOSE╫INDOW (─ISP╔─);
▌
GETCH()
█
CHAR A, X, Y;
DO
SYS (0XFFE4, &A, &X, &Y);
WHILE (A == 0);
RETURN A;
▌
ADD()
█
CHAR ┴DD╔─;
UNSIGNED N;
╞╔╠┼ F;
IF ( !(┴DD╔─ = ╧PEN╫INDOW (15, 7, 35, 14, " ┴DD ")))
RETURN;
PRINTF ("\NHIT ╥┼╘╒╥╬ WHEN DONE\N");
FOR (;;) █
PRINTF ("\NOBJECT FILE NAME: ");
GETVALUE (INBUF, 1, 16, 0);
IF (!ISALPHA(*INBUF)) █
├LOSE╫INDOW (┴DD╔─);
RETURN;
▌
F = FOPEN (INBUF, "R");
IF (F == ╬╒╠╠ ▀▀ FERROR())
PRINTF ("CAN'T OPEN %S\N", INBUF);
ELSE █
N = GETW(F);
WHILE (N--)
GETC(F);
N = GETW(F);
WHILE (N--)
GETW(F);
N = GETW(F);
WHILE (N-- && SIZE < ═┴╪╠╔┬) █
GETID (IDS[SIZE], F);
IF (ISALPHA(*IDS[SIZE]) && ISPRINT(IDS[SIZE][1]))
STRCPY (FILES[SIZE++], INBUF);
GETC(F);
GETW(F);
▌
FCLOSE (F);
IF (SIZE == ═┴╪╠╔┬) █
PRINTF ("\NLIBRARY IS FULL\N");
WAIT();
├LOSE╫INDOW (┴DD╔─);
RETURN;
▌
▌
▌
▌
REMOVE()
█
CHAR ╥EMOVE╔─;
UNSIGNED I, J;
IF ( !(╥EMOVE╔─ = ╧PEN╫INDOW (25, 12, 35, 10, " ╥EMOVE ")))
RETURN;
PRINTF ("\NHIT ╥┼╘╒╥╬ WHEN DONE\N");
FOR (;;) █
PRINTF ("\NFILE TO DELETE: ");
GETVALUE (INBUF, 1, 16, 0);
IF (!ISALPHA(*INBUF)) █
├LOSE╫INDOW (╥EMOVE╔─);
RETURN;
▌
FOR (I = 0; I < SIZE && STRCMP(FILES[I], INBUF) != 0; I++)
;
IF (I == SIZE)
PRINTF ("\NFILE NOT FOUND\N");
ELSE █
WHILE (I < SIZE && STRCMP (FILES[I], INBUF) == 0) █
FOR (J = I; J+1 < SIZE; J++) █
STRCPY (FILES[J], FILES[J+1]);
STRCPY (IDS[J], IDS[J+1]);
▌
SIZE--;
▌
▌
▌
▌
/* ================================== */
/* */
/* ╟ET COMMMAND AND RETURN COMMAND # */
/* */
/* ╙IZE INDICATES MAX INPUT LENGTH. */
/* ╠IMIT INDICATES NUMBER OF COMMANDS */
/* IN THE CMPVAL COMMAND TABLE. */
/* ================================== */
CHAR GETCMD (INVAL, CMPVAL, SIZE, LIMIT)
CHAR INVAL[], *CMPVAL[], LIMIT, SIZE;
█
CHAR CTR;
UNSIGNED INDX;
IF ((INDX = GETVALUE (INVAL, 1, SIZE, 1)) > 0) █
FOR (CTR = 0; CTR < LIMIT; CTR++) █
IF (!STRNCMP (INVAL, CMPVAL[CTR], INDX)) █
PRINTF ("%S", CMPVAL[CTR] + INDX);
RETURN (CTR);
▌
▌
▌
RETURN (╔╬╓┴╠╔─);
▌
/* ================================== */
/* */
/* ╟ET A STRING, OR NUMERICAL VALUE */
/* */
/* ═ODE == 0 RETURNS A POSITIVE INT. */
/* ═ODE == 1 RETURNS THE LENGTH OF */
/* THE STRING LEFT AT WORKAREA. */
/* ╙IZE SPECIFIES THE FIELD LENGTH */
/* ╒LCASE == 0 DISPLAYS VALUE AS IS */
/* ╒LCASE == 1 DISPLAYS AND CONVERTS */
/* THE CHARACTERS TO UPPER CASE. */
/* ================================== */
UNSIGNED GETVALUE (WORKAREA, MODE, SIZE, ULCASE)
UNSIGNED MODE, SIZE, ULCASE;
CHAR WORKAREA[];
█
UNSIGNED CNTR = 0;
CHAR HOLD;
WHILE ((HOLD = CRSGET ()) != ├╟╥┼╘╒╥╬) █
IF (HOLD != ─┼╠┼╘┼) █
IF (CNTR < SIZE) █
IF (MODE == 0) █
IF (ISDIGIT (HOLD) && CNTR < SIZE) █
PUTCHAR (HOLD);
WORKAREA[CNTR++] = HOLD;
▌
▌
ELSE █
WORKAREA[CNTR++] = (ULCASE ? (HOLD = TOUPPER (HOLD)) : HOLD);
PUTCHAR (HOLD);
▌
▌
▌
ELSE █
IF (CNTR > 0) █
PRINTF ("%C %C", 157, 157);
CNTR--;
▌
▌
▌
WORKAREA[CNTR] = '\0';
IF (MODE == 0)
RETURN ((UNSIGNED) (ATOI (WORKAREA)));
ELSE
RETURN ((UNSIGNED) CNTR);
▌
/* ================================== */
/* */
/* ├HARACTER ╟┼╘, WITH CURSOR */
/* */
/* ================================== */
CHAR CRSGET ()
█
CHAR CH, DUMMY;
DO █
SYS (0XFFE4, &CH, &DUMMY, &DUMMY);
IF (CH == ├╟╥┼╘╒╥╬ ▀▀ CH == ─┼╠┼╘┼)
BREAK;
PRINTF ("ñ%C %C", 157, 157);
▌
WHILE (!(ISALNUM (CH) ▀▀ ISSPACE (CH) ▀▀ ISPUNCT (CH) ▀▀ (CH > 159 && CH < 224)));
RETURN (CH);
▌
/* ================================== */
/* */
/* ╬ON-WAITING CHARACTER ╟┼╘ */
/* */
/* ================================== */
CHAR GETKEY ()
█
CHAR A, DUMMY;
SYS (0XFFE4, &A, &DUMMY, &DUMMY);
RETURN (A);
▌
/* ================================== */
/* */
/* ├ASE CONVERSION ROUTINES */
/* */
/* ================================== */
CHAR TOUPPER (CNVRT)
CHAR CNVRT;
█
RETURN (((ISLOWER (CNVRT)) ? (CNVRT + 128) : CNVRT));
▌